/** ============================================================================================== **/
/* 						LETTURA CONFIGURAZIONI PROFILO MAPPA E ALBERO DEI LAYER 				    */	
/** ============================================================================================== **/


BootApplication.controller("ProfileCtrl",
  [ "$scope", "log", "olMapsInst", "olBuildService", "olLayerService", "olControlService", "olTreeInst", "configuration",
  function ($scope, log, olMapsInst, olBuildService, olLayerService, olControlService, olTreeInst, configuration) {
	  
	/*
	 * Inizializzo nello scope una variabile, che solo quando diventerà vera i controller e/o l'html che sono in ascolto verrano
	 * processati da angular.
	 */
	$scope.endStartup = false;
	/**
	 * Recupero le configurazioni della mappa definite per l'identificativo profilo impostato.
	 */
	olBuildService.getProfileMapConfiguration(configuration.getParam("ol.ApplicationProperty").ID_PROFILO).then(function successCallback(response, status) { 

		if(response != null && angular.isObject(response)) {

			/**
			 * Salvo nello scope i parametri di configurazione della mappa, di modo da renderli disponibili sempre nell'applicazione.
			 */
			$scope.olMapConfiguration = response;

			/**
			 * Controllo se l'albero dei layer è abilitato, se no interrompo l'esecuzione
			 */
			if(response.isEnableLayersTree()) {
				/**
				 * Dati l'identificativo del profilo e della mappa, ritorna l'array con gli elementi della struttura da cui è composto il JsTree.
				 */
				olLayerService.createTreeData(response).then(function successCallback(response, status) {

					/**
					 * Un controllo pulsante che, se premuto, attiva/disattiva la visualizzazione dell'albero dei layer
					 * Per stile di questo controllo utilizzare il selettore CSS .ol-layers.
					 */
					var treeControl = olControlService.createLayerTreeControl("ol-layers");
					/**
					 * Ritorna l'oggetto di configurazione del JsTree.
					 */
					var treeConfig = olLayerService.createTreeConfig();
					/**
					 * Restituisce il json con il quale disegnare l'albero(Categoria e sottocategoria)
					 */
					var treeData = response;

					/**
					 * Ritorna il json con l'elenco dei layer associati alla mappa di questo profilo.
					 */
					olLayerService.createTreeLayerInfo($scope.olMapConfiguration).then(function successCallback(response, status) {
						/**
						 *
						 */
						var treeLayers = response;
						/**
						 * Ritorna il json con l'elenco dei layer associati alla mappa di questo profilo.
						 */
						olLayerService.createTreeStyles($scope.olMapConfiguration).then(function successCallback(response, status) {

							/**
							 * Model dove salvare i dati utili al build dell'albero dei layer.
							 */
							var olTree = new olTreeInst();
								/** controllo per di openlayers per "Mostrare e nascondere l'albero". **/
								olTree.setTreeControl(treeControl);
								/** l'oggetto di configurazione del JsTree **/
								olTree.setTreeConfig(treeConfig);
								/** l'array con gli elementi della struttura ad albero**/
								olTree.setTreeData(treeData);
								/** l'array con l'elenco dei layer **/
								olTree.setTreeLayers(treeLayers);
								/** l'array con l'elenco degli stili **/
								olTree.setTreeStyles(response);

							/**
							 * Salvo nello scope i parametri di configurazione, di modo da renderli disponibili sempre nell'applicazione.
							 */
							$scope.olTreeConfiguration = olTree;

							/**
							 * Valorizzo a true la variabile, di modo che i controller in attesa possano essere registrati.
							 */
							$scope.endStartup = true;

						}, function errorCallback(response, status) {
							log.error("buildLayerTree error " + response)
							/**
							 * Valorizzo a true la variabile, di modo che i controller in attesa possano essere registrati.
							 */
							$scope.endStartup = true;
						});

					}, function errorCallback(response, status) {
						log.error("buildLayerTree error " + response)
						/**
						 * Valorizzo a true la variabile, di modo che i controller in attesa possano essere registrati.
						 */
						$scope.endStartup = true;
					});

				}, function errorCallback(response, status) {
					log.error("buildLayerTree error " + response)
					/**
					 * Valorizzo a true la variabile, di modo che i controller in attesa possano essere registrati.
					 */
					$scope.endStartup = true;
				});
			}// close if enable tree
			else
			  /**
			   * Valorizzo a true la variabile, di modo che i controller in attesa possano essere registrati.
			   */
			  $scope.endStartup = true;
		}else{
			log.error("Configurazioni non recuperate per l'id profilo " + ol.ApplicationProperty.ID_PROFILO);
			/**
			 * Valorizzo a true la variabile, di modo che i controller in attesa possano essere registrati.
			 */
			$scope.endStartup = true;
		}
	}, function errorCallback(response, status) {
		log.error("Configurazioni non recuperate per l''id profilo. Response error: " + response);
		/**
		 * Valorizzo a true la variabile, di modo che i controller in attesa possano essere registrati.
		 */
		$scope.endStartup = true;
	});
}]);